package models

import (
	"strconv"
	"strings"

	"github.com/astaxie/beego/orm"
)

// 管理员
type Admin struct {
	Id         int
	LoginName  string //登录名称
	RealName   string //真实姓名
	Password   string //密码
	RoleIds    string //角色id字符串
	Phone      string //联系电话
	Email      string //邮箱
	Salt       string //密码盐
	LastLogin  int64  //最后登录时间
	LastIp     string //最后登录的ip
	Status     int    //状态 1-正常  0-禁用
	CreateId   int    //创建者id
	UpdateId   int    //更新者id
	CreateTime int64  //创建时间
	UpdateTime int64  //更新时间
}

func (admin *Admin) TableName() string {
	return TableName("uc_admin")
}

func (admin *Admin) Update(fields ...string) error {

	if _, err := orm.NewOrm().Update(admin, fields...); err != nil {
		return err
	}
	return nil
}

// 在执行错误的通知email报警
func AdminGetList(page, pagesize int, filters ...interface{}) ([]*Admin, int64) {
	// orm.Debug = true
	//获取管理员表的句柄
	query := orm.NewOrm().QueryTable(TableName("uc_admin"))

	//判断过滤条件
	if len(filters) > 0 {
		//获取过滤条件的长度
		j := len(filters)

		//遍历过滤条件
		for k := 0; k < j; k += 2 {
			query = query.Filter(filters[k].(string), filters[k+1])
		}

	}

	totle, _ := query.Count()

	list := make([]*Admin, 0)

	//计算偏移量
	offset := (page - 1) * pagesize

	//分页查找
	query.OrderBy("-id").Limit(pagesize, offset).All(&list)

	return list, totle
}

// 根据用户名查找用户信息

func AdminGetByName(adminName string) (*Admin, error) {
	admin := new(Admin)
	err := orm.NewOrm().QueryTable(TableName("uc_admin")).Filter("login_name", adminName).One(admin)

	if err != nil {
		return nil, err
	}

	return admin, err
}

//根据用户userId 查找用信息
func AdminGetById(userId int) (*Admin, error) {
	admin := new(Admin)
	err := orm.NewOrm().QueryTable(TableName("uc_admin")).Filter("Id", userId).One(admin)

	if err != nil {
		return nil, err
	}

	return admin, err
}

// 根据用户ids 获取用户信息
func AdminGetByIds(adminIds string) []*Admin {

	query := orm.NewOrm().QueryTable(TableName("uc_admin"))

	//过滤状态正常的管理员
	query = query.Filter("status", 1)

	var userIds []int
	if adminIds != "" && adminIds != "0" {
		userIdstr := strings.Split(adminIds, ",")

		for _, v := range userIdstr {
			id, _ := strconv.Atoi(v)
			userIds = append(userIds, id)
		}
		query = query.Filter("id__in", userIds)
	}

	list := make([]*Admin, 0)

	query.OrderBy("-id").All(&list)
	return list
}

//
func AdminAdd(admin *Admin) (int64, error) {
	return orm.NewOrm().Insert(admin)
}
